iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 7
0
Software Development

SQL 30天手把手入門系列 第 7

Day7 - 今晚,你想來點 關聯 / 非關聯?

  • 分享至 

  • xImage
  •  

關聯式資料庫 (SQL) 和 非關聯式資料庫 (NoSQL) 本質上都是用來儲存資料的,並沒有互相取代的問題。根據專案和使用情境的不同,選擇合適的資料庫架構可以讓開發者節省成本,來達成每個使用者需求。

  • SQL 特點
    採用 SQL 的架構,在編修、查找、更新資料記錄、抓取資料關聯、每筆資料間的一致性上有其優勢。而且不同的 SQL 間,是有共同標準語言的,若真要轉換到不同家的 SQL,障礙會降低不少。

另外,SQL 的 Transaction 能夠包裹多個 SQL 敘述句,確保 Transaction 前後資料的正確性。這些特性被稱為 Atomicity, Consistency, Isolation, Durability,縮寫為 ACID (化學領域中是指某某酸,例如 hydrochloric acid, 氫氯酸 aka 鹽酸)。

  1. Atomicity: 指令全部執行成功 或 全部執行失敗
  2. Consistency:資料前後的一致性
    例如:一筆交易前後甲乙雙方一共有 80 元,那在執行完操作後,總數一樣會是 80 元
  3. Isolation:多筆交易不會互相影響
    例如:一人先後從戶頭轉出 1000 元和 100 元,那第二次交易所轉的 100 元,一定會是第一筆交易完成後所剩下的數值,再減去 100 元
  4. Durability:交易成功後,寫入和變更資料的成果不會莫名消失
  • NoSQL 特點
    不需要特定先規定好 Schema,可擴充性佳。每一筆 NoSQL 的 document 本身是個物件外,裡面的 key-value 結構中,也可以再包含其他物件。在物件和物件中的重重包裹中,彼此並不一定要存在同一台伺服器上。

若要回傳以下的 JSON 資料,採用 NoSQL 可以直接以這樣的方式儲存單一商品資訊,或將 successfulOrders 的值放置到另一台 Server 中,等使用者呼叫時再重新組合回傳也是可以的。

   {
       id:12,
       title:"Product12",
       comments:[
           {id:3,message:"That's great!"},
           {id:6,message:"That's awesome!"}
       ],
       successfulOrders:35
   }
  • 哪一種效能比較快?
    普遍的說法為 NoSQL,因為 NoSQL 並不需要透過額外的 JOIN 或複雜的 SQL 敘述句才能取得所有相關資訊,但最關鍵的還是最一開始的資料庫設計階段,能否真實滿足使用者需求。因此,這題我自己是覺得沒有標準答案。

  • NoSQL 有類似 SQL 的 Transaction 嘛?
    在更新單一 document 內裡頭的值,是可以確保一起被改變或是一起失敗的。不過在多個 documents 間的溝通上,並沒有預設這樣的機制。

  • SQL 和 NoSQL 哪一個比較夯?
    以當紅熱門的 NoSQL - MongoDB 和 MySQL 來做對比,由 Google Trend 可以一窺究竟:
    Google Trend Result

所以回到標題,我到底該選哪一個?

  • 建議使用 SQL 的場景
  1. 數據的前後一致和完整性是不容出錯的
  2. 可以預先確立資料與邏輯相關需求
  3. 若你有使用 JOIN 和複雜查詢關聯指令的需求
  • 建議使用 NoSQL 的場景
  1. 當你需要動態的 Schema 來因應日後需求
  2. 良好的資料擴展性和速度是專案所需
  3. 從不同的伺服器中組合回傳資料
  4. 不需要在資料庫中驗證邏輯

Reference

  1. (Why NoSQL is better at “scaling out” than RDBMS?)[https://stackoverflow.com/questions/8729779/why-nosql-is-better-at-scaling-out-than-rdbms]
  2. (SQL vs NoSQL: What's the difference?)[https://www.guru99.com/sql-vs-nosql.html]
  3. (SQL vs NoSQL: The Differences)[https://www.kshuang.xyz/doku.php/database:sql_vs_nosql]

上一篇
Day6 - NoSQL 非關聯式資料庫
下一篇
Day 8 SQL Injection
系列文
SQL 30天手把手入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言